# Adogs
# 时间: 2021/8/7 13:35
import pygame

from dialog.tunnel_dialog import TunnelTask1BeginDialog, TunnelTask1EndDialog, TunnelTaskFailDialog
from scene.task import BaseTask, TaskStatus


class TakePrizesTask(BaseTask):
    """
    任务一:找到宝箱
    方法:
    1.__init__(xiao_tie, prizes_group, font)
    2.do_self_task(key_down, key_list)
    """
    def __init__(self, xiao_tie, prizes_group, font):
        """
        初始化函数
        :param xiao_tie: 主角人物
        :param prizes_group: 宝箱组
        :param font: 字体
        """

        self.score = 0  # 当前任务获得分数
        self.xiao_tie = xiao_tie
        self.prizes_group = prizes_group
        self.font = font

        self.start_dialog = TunnelTask1BeginDialog(font)
        self.win_dialog = TunnelTask1EndDialog(font)
        self.fail_dialog = TunnelTaskFailDialog(font)

        self.sound = pygame.mixer.Sound("resources/sound/prizes.mp3")   # 加载找到宝箱时的音效
        super(TakePrizesTask, self).__init__(self.start_dialog, self.win_dialog, self.fail_dialog)     # 调用基类初始化函数

    def do_self_task(self, key_down, key_list):
        """
        任务函数
        :param key_down: 判断是否点击按键
        :param key_list: 判断是否有键被按下
        :return: 无返回值
        """

        # 更改小铁的矩形判定框，使宝物碰撞的范围变大
        temp_rect = self.xiao_tie.rect
        self.xiao_tie.rect = pygame.Rect(self.xiao_tie.pos_x + 5, self.xiao_tie.pos_y + 6, 20, 60)

        # 碰撞判定
        if key_down and key_list[pygame.K_j]:

            collide_list = pygame.sprite.spritecollide(self.xiao_tie, self.prizes_group, True)
            # 这里的True，是代表碰撞判定成功后就将这个对象删去；若换成False，就是判定成功后不删去
            # 该函数的返回值是发生碰撞的精灵列表

            if len(collide_list) > 0:   # 有精灵发生碰撞
                self.score += 1
                self.sound.play()   # 播放音效
            if self.score >= 2:     # 任务成功条件
                self.task_status = TaskStatus.win_dialog
        elif key_list[pygame.K_z]:
            self.task_status = TaskStatus.win_dialog
        self.xiao_tie.rect = temp_rect

